﻿using System.ComponentModel.DataAnnotations;

namespace Ants.SimpleDistributionProblem.DTO
{
    /// <summary>
    /// Properties class for ant algorithm.
    /// </summary>
    public class AntAlgorithmProperties
    {
        /// <summary>
        /// Gets or sets the alpha parameter used as indicator of importance of pheromone amount.
        /// </summary>
        /// <value>
        /// The alpha.
        /// </value>
        public double Alpha { get; set; }

        /// <summary>
        /// Gets or sets the beta parameter used as indicator of importance of attractiveness function.
        /// </summary>
        /// <value>
        /// The beta.
        /// </value>
        public double Beta { get; set; }

        /// <summary>
        /// Gets or sets the coefficient of evaporation.
        /// </summary>
        /// <value>
        /// The coefficient of evaporation.
        /// </value>
        [Range(0, 1)]
        public double CoefficientOfEvaporation { get; set; }

        /// <summary>
        /// Gets or sets the initial pheromone amount.
        /// </summary>
        /// <value>
        /// The initial pheromone amount.
        /// </value>
        public double InitialPheromoneAmount { get; set; }

        /// <summary>
        /// Gets or sets the number of ants.
        /// </summary>
        /// <value>
        /// The number of ants.
        /// </value>
        [Range(1, int.MaxValue)]
        public int NumberOfAnts { get; set; }

        /// <summary>
        /// Gets or sets the number of iterations.
        /// </summary>
        /// <value>
        /// The number of iterations.
        /// </value>
        [Range(1, double.MaxValue)]
        public int NumberOfIterations { get; set; }

        /// <summary>
        /// Gets or sets the number of threads.
        /// </summary>
        /// <value>
        /// The number of threads.
        /// </value>
        [Range(1, int.MaxValue)]
        public int NumberOfThreads { get; set; }

        /// <summary>
        /// Gets or sets the Q parameter, which is used in adding pheromone trail.
        /// </summary>
        /// <value>
        /// The Q parameter.
        /// </value>
        public double QParameter { get; set; }
    }
}